package com.evil.enterprise.controller;

import com.evil.application.api.RemoteApplicationImportTemplateService;
import com.evil.application.pojo.dto.template.UploadTemplateReqDTO;
import com.evil.application.pojo.dto.template.imp.*;
import com.evil.common.core.entity.R;
import com.evil.common.file.constant.OssConstant;
import com.evil.common.file.dto.FileRespDTO;
import com.evil.common.file.dto.xml.XmlNodeTreeRespDTO;
import com.evil.common.file.enums.BusTypeEnum;
import com.evil.common.log.annotation.RequestLogAnnotation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 应用导入模板接口
 *
 * @author liyang
 * @date 2023-04-06 17:56
 */
@Slf4j
@RestController
@AllArgsConstructor
@RequestMapping("/application/import-template")
public class ApplicationImportTemplateController {

    private final RemoteApplicationImportTemplateService remoteApplicationImportTemplateService;

    /**
     * 打印模板列表接口
     *
     * @param importTemplateListReqDTO templateListReqDTO
     * @return R
     */
    @PostMapping("/list")
    public R<List<ImportTemplateRespDTO>> list(@Validated @RequestBody ImportTemplateListReqDTO importTemplateListReqDTO) {
        importTemplateListReqDTO.setEnterpriseId(null);
        return R.success(remoteApplicationImportTemplateService.list(importTemplateListReqDTO));
    }

    /**
     * 保存打印模板文件
     *
     * @param saveImportTemplateReqDTO addUploadTemplateReqDTO
     * @return R
     */
    @RequestLogAnnotation(isSaveRequestData = false)
    @PostMapping("/save")
    public R<?> save(@Validated @RequestBody SaveImportTemplateReqDTO saveImportTemplateReqDTO) {
        remoteApplicationImportTemplateService.save(saveImportTemplateReqDTO);
        return R.success();
    }

    /**
     * 重命名打印模板
     *
     * @param renameImportTemplateReqDTO templateRenameReqDTO
     * @return R
     */
    @PostMapping("/rename")
    public R<?> rename(@Validated @RequestBody RenameImportTemplateReqDTO renameImportTemplateReqDTO) {
        remoteApplicationImportTemplateService.rename(renameImportTemplateReqDTO);
        return R.success();
    }

    /**
     * 删除打印模板
     *
     * @param deleteImportTemplateReqDTO deleteTemplateReqDTO
     * @return R
     */
    @RequestLogAnnotation
    @PostMapping("/delete")
    public R<?> delete(@Validated @RequestBody DeleteImportTemplateReqDTO deleteImportTemplateReqDTO) {
        remoteApplicationImportTemplateService.delete(deleteImportTemplateReqDTO);
        return R.success();
    }

    /**
     * 打印模板详情
     *
     * @param importTemplateDetailReqDTO templateDetailReqDTO
     * @return R
     */
    @PostMapping("/detail")
    public R<ImportTemplateRespDTO> detail(@Validated @RequestBody ImportTemplateDetailReqDTO importTemplateDetailReqDTO) {
        return R.success(remoteApplicationImportTemplateService.detail(importTemplateDetailReqDTO));
    }

    /**
     * 上传打印模板
     *
     * @param uploadTemplateReqDTO uploadTemplateReqDTO
     * @return R
     */
    @PostMapping("/template")
    public R<FileRespDTO> upload(@Validated UploadTemplateReqDTO uploadTemplateReqDTO) {
        uploadTemplateReqDTO.setType(BusTypeEnum.APPLICATION_PRINT_TEMPLATE_FILE.getId());
        uploadTemplateReqDTO.setAllowContentType(OssConstant.UPLOAD_WORD_TYPE);
        uploadTemplateReqDTO.setAllowMaxSize(OssConstant.UPLOAD_FILE_SIZE);
        return R.success(remoteApplicationImportTemplateService.upload(uploadTemplateReqDTO));
    }

    /**
     * 下载打印模板文件接口
     *
     * @param downloadImportTemplateReqDTO downloadTemplateReqDTO
     * @return R
     */
    @PostMapping("/download")
    public R<FileRespDTO> download(@Validated @RequestBody DownloadImportTemplateReqDTO downloadImportTemplateReqDTO) {
        return R.success(remoteApplicationImportTemplateService.download(downloadImportTemplateReqDTO));
    }

    /**
     * 读取xml文件
     *
     * @param fileCode fileCode
     * @return R
     */
    @PostMapping("/read-xml-node")
    public R<List<XmlNodeTreeRespDTO>> readXmlNode(@RequestParam("fileCode") String fileCode) {
        return R.success(remoteApplicationImportTemplateService.readXmlNode(fileCode));
    }

    /**
     * 打印模板数据
     *
     * @param importTemplateReqDTO importTemplateReqDTO
     */
    @PostMapping("/import")
    public R<FileRespDTO> importTemplate(@Validated @RequestBody ImportTemplateReqDTO importTemplateReqDTO) {
        return R.success(remoteApplicationImportTemplateService.importTemplate(importTemplateReqDTO));
    }
}
